package com.msf.tutorial.java8.chapter7;

import java.util.Arrays;
import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;

/**
 * 查找和匹配
 *
 * allMatch     检查谓词是否匹配所有元素
 * anyMatch     检查谓词是否至少匹配一个元素
 * noneMatch    没有任何元素与给定的谓词匹配，与 allMatch 正好相反
 * findFirst    返回流中第一个元素
 * findAny      返回流中任意一个元素
 */
public class C04Match {

    /**
     * allMatch
     * 检查谓词是否匹配所有元素
     * 相当于 && 操作
     *
     * 判断数字列表是否全部大于30
     */
    public static boolean allMatch() {
        List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);
        return list.stream().allMatch(i -> i > 30);
    }

    /**
     * anyMatch
     * 检查谓词是否至少匹配一个元素
     * 相当于 || 操作
     *
     * 判断数字列表是否有大于30的
     */
    public static boolean anyMatch() {
        List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);
        return list.stream().anyMatch(i -> i > 30);
    }

    /**
     * noneMatch
     * 没有任何元素与给定的谓词匹配，与 allMatch 正好相反
     * 相当于 ! 操作
     *
     * 判断数字列表是否全部小于等于30
     */
    public static boolean noneMatch() {
        List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);
        return list.stream().noneMatch(i -> i > 30);
    }

    /**
     * findFirst
     * 返回流中第一个元素
     */
    public static void findFirst() {
        List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);
        list.stream().findFirst().ifPresent(System.out::println);
    }

    /**
     * findAny
     * 返回流中第一个元素
     */
    public static void findAny() {
        List<Integer> list = Arrays.asList(5, 1, 2, 3, 4, 5);
        list.stream().findAny().ifPresent(System.out::println);
    }

    public static void main(String[] args) {
        findFirst();

        findAny();
    }

}
